#ifndef LEXICO_H_
#define LEXICO_H_

#include <list>
#include <vector>
#include <sstream>
#include "Arquivo.h"
#include "Tokenizer.h"

enum tipoCaracter {
	LETRA,NUMERO,SIMBOLO,DESCONHECIDO
};

class Lexico {

public:
	Lexico();
	virtual ~Lexico();
	void setArquivo(char*,char*);
	bool analiseLexico();
	void imprimirToken();
	list<Tokenizer> getTokensEncontrado();
	
private:

	int verificarCaracter(char);
	bool isInicioDeComentario(char);
	bool isInicioDeComentario(char, char);
	bool isFimDeComentario(char);
	bool isFimDeComentario(char, char);
	bool isSimboloComposto(char, char);
	bool isPalavraReservada(string);
	bool isEspaco(char);
	bool isBooleano(string);
	bool isNumero(char);
	bool isLetra(char);
	bool isDelimitadorSimples(char);
	bool isSimboloSimples(char);
	void criarTokenizer(string, tipoToken, int,string);
	void setNumero();
	void setLetra();
	void setSimbolos();
	void setPalavrasReservadas();
	string intToString(int);
	list<string>brokenString(string);
	
	Arquivo arquivoEntrada;
	Arquivo arquivoSaida;
	list<string> palavrasReservadas;
	vector<char> numero;
	vector<char> letra;
	vector<char> simbolos;
	list<Tokenizer> tokensEncontrado;
	list<Tokenizer>::iterator itToken;
};

#endif /*LEXICO_H_*/
